// packageOnlineStore/pages/productEvaluation/productEvaluation.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    baseUrl:'',//全局连接地址
    userId:"",//用户id
    likeState:false,//默认没有点赞
    productId:'',//商品id
    dataList:[],//商品评价列表(所有)
    pageNum:1,//页码
    dataList:[],//商品列表(所有)
    totalPageCount:0, //总页数 
    isLoading: false, //节流阀标识
    judgeLike:[],//标志所有评论是否被该用户点赞
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    const app = getApp();
    const baseUrl=app.globalConfig.baseUrl //获取本地连接地址
    const userId=app.globalData.userInfo.userId
    const token = wx.getStorageSync('token');
    const productId=options.id
    this.setData({
      userId:app.globalData.userInfo.userId,
      productId:options.id,
      baseUrl:app.globalConfig.baseUrl,
    })
    this.getList([baseUrl,userId,productId]);
  },
   /**
   * 用户点击点赞图标对应的处理函数
   */
  like: function (e) {
    
  },
  navigatorto(){
    wx.navigateTo({
      url: '/packageOnlineStore/pages/reviewDetails/reviewDetails',
    })
  },
  //跳转到点击评论的评论详情
  goCommentDetails(e){
    wx.navigateTo({
      url: '/packageOnlineStore/pages/reviewDetails/reviewDetails?id='+e.currentTarget.dataset.id
    })
  },
  //添加评论点赞
  addCollect(e){
    const app = getApp();
    const commentId=e.currentTarget.dataset.commentId
    const baseUrl=this.data.baseUrl //获取本地连接地址
    const userId=app.globalData.userInfo.userId
    const token = wx.getStorageSync('token');
    const productId=this.data.productId
     wx.request({
      url: baseUrl+'/product/commentLike',
      method:'POST',
      data:{
        userId:userId,
        commentId:commentId
      },
      header:{
        'Authorization': 'Bearer\u0020' + token
      },
      success:(res)=>{
        this.getList([baseUrl,userId,productId])
      },
    })
  },
  //取消评论点赞
  cancelCollect(e){
    const app = getApp();
    const commentId=e.currentTarget.dataset.commentId
    const baseUrl=this.data.baseUrl //获取本地连接地址
    const userId=app.globalData.userInfo.userId
    const token = wx.getStorageSync('token');
    const productId=this.data.productId
     wx.request({
      url: baseUrl+'/product/commentLike/list',
      method:'GET',
      data:{
        commentId:commentId,
        userId:userId
      },
      header:{
        'Authorization': 'Bearer\u0020' + token
      },
      success:(res)=>{
        const LikeId=res.data.rows[0].id //获取到的已点赞的商品id
        wx.request({
          url: baseUrl+'/product/commentLike/'+LikeId,
          method:'DELETE',
          header:{
            'Authorization': 'Bearer\u0020' + token
          },
          success:(res)=>{
            this.getList([baseUrl,userId,productId])
          },
        })
      },
    })
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    this.setData({
      pageNum:1,//页码
      dataList:[],
      totalPageCount:0 //总页数 
    })
    const app = getApp();
    const baseUrl=app.globalConfig.baseUrl //获取本地连接地址
    const userId=app.globalData.userInfo.userId
    const productId=this.data.productId
    this.getList([baseUrl,userId,productId])
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    //判断节流阀
    if(this.data.isLoading){
      return;
    }
   //没有更多数据，提示
   if(this.data.pageNum>=this.data.totalPageCount){
     wx.showToast({
       title: '没有更多数据了！',
       icon:'none'
     })
     return;
   }
   //当上提触底的时候，加载当前页+1（下一页）的数据
   this.setData({
     pageNum:this.data.pageNum + 1
   })
   const app = getApp();
    const baseUrl=app.globalConfig.baseUrl //获取本地连接地址
    const userId=app.globalData.userInfo.userId
    const productId=this.data.productId
    this.getList([baseUrl,userId,productId])
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },
  // 初始化方法
  getList(e) {
    const app = getApp();
    const baseUrl = app.globalConfig.baseUrl; // 获取本地连接地址
    const userId=app.globalData.userInfo.userId
    const token = wx.getStorageSync('token');
    const productId = e[2];
    // 节流阀开始
    this.setData({
        isLoading: true
    });
    // 加载时显示loading框
    wx.showLoading({
        title: '数据正在加载',
    });
    wx.request({
        url: baseUrl + '/product/productComment/list',
        data: {
            pageNum: this.data.pageNum,
            pageSize: 2,
            productId: productId
        },
        header:{
          'Authorization': 'Bearer\u0020' + token
        },
        method: 'GET',
        success: (res) => {
            let productComment = res.data.rows;
            const commentLikePromises = []; // 用于存储多个判断点赞请求的Promise数组
            const commentLikeStatus = {}; // 新增对象，用于存储评论id和对应的点赞情况
            // 遍历课程评价数据列表，为每个评价添加根据评分生成的星星显示逻辑
            productComment.forEach(item => {
                let score = item.productScore;
                let stars = [];
                for (let i = 0; i < 5; i++) {
                    if (i < score) {
                        stars.push({ type: 'yellow' }); // 黄色星
                    } else {
                        stars.push({ type: 'gray' }); // 灰色星
                    }
                }
                item.stars = stars;
                // 针对每条评论创建一个判断是否点赞的Promise请求
                const likeCheckPromise = new Promise((resolve, reject) => {
                    wx.request({
                        url: baseUrl + '/product/commentLike/list?userId=' + userId + '&commentId=' + item.id,
                        method: 'GET',
                        header:{
                          'Authorization': 'Bearer\u0020' + token
                        },
                        success: (res) => {
                            commentLikeStatus[item.id] = res.data.rows.length === 1; // 直接将点赞情况存入对象，以评论id为键
                            resolve(); // 当单个请求成功，进行resolve
                        },
                        fail: (err) => {
                            reject(err);
                        }
                    });
                });
                commentLikePromises.push(likeCheckPromise);
            });
            // 使用Promise.all并发执行所有判断点赞的请求，确保所有请求都完成后再继续后续操作
            Promise.all(commentLikePromises)
              .then(() => {
                    this.setData({
                        dataList: res.data.rows,
                        totalPageCount: Math.ceil(res.data.total / 2),
                        commentLikeStatus: commentLikeStatus // 将存储点赞情况的对象设置到data中
                    });
                    // 加载数据完成后关闭loading框
                    wx.hideLoading();
                    // 关闭下拉刷新
                    wx.stopPullDownRefresh();
                    // 数据加载完成关闭节流阀
                    this.setData({
                        isLoading: false
                    });
                })
              .catch((error) => {
                    console.error('判断点赞请求出错:', error);
                });
        },
    });
  }
})